/*
 * Università degli Studi di Trento
 * Facoltà di Scienze MM.FF.NN.
 * Corso di Laurea Triennale in Informatica
 * A.A. 2011/2012
 * Progetto per il corso di Sistemi Operativi 1
 * Progetto 3: 
 * Autori:
 * Bertoldi Lorenzo 155863
 * Cattin Cosso Manuel 146607
 * Parrello Nicola 145610
 */

/********************************************************************************
  Questa file contiene la definizione della struttura della lista dei thread
  e i metodi ad essa collegati.
********************************************************************************/


#ifndef LISTATHREAD_H
#define LISTATHREAD_H

#include "threadFiglio.h"


typedef struct SListaThread * pListaThread;

typedef struct SNodoListaThread * pNodoListaThread;

typedef struct SListaThread{
    pNodoListaThread inizio;
    pNodoListaThread fine;
    int dim;
    int attivi;
  }ListaThread ;
  
typedef struct SNodoListaThread{
    pThreadFiglio thread;
    pNodoListaThread  next;
  }NodoListaThread ;


/*
 * Costruttore:
 * Alloca lo spazio per la struttura di accesso e istanzia le variabili
 * Restituisce un puntatore nullo.
*/
pListaThread ListaThread_create();

/*
 * insert :
 * Inserisce il puntatore nella lista, se la lista non esiste ne crea una
*/
void ListaThread_insert(pListaThread, pThreadFiglio);


/*
 * find :
 * Ritorna il thread alla posizione n
*/
pThreadFiglio ListaThread_find(pListaThread, int);

/*
 * ricompattaLista :
 * Rimuove i thread con stato FINISH dalla lista
 * return: il numero di nodi rimossi
*/
int ListaThread_ricompattaLista(pListaThread);

/*
 * distruttore:
 * Rimuove tutti gli elementi dalla lista 
*/
void ListaThread_destroy(pListaThread);


#endif /* LISTATHREAD_H */